package com.webserver.servlet;

import com.webserver.http.HttpRequest;
import com.webserver.http.HttpResponse;
import com.webserver.vo.User;
import java.io.*;

/**
 *  用于处理注册业务
 */
public class RegServlet {
    public void service(HttpRequest request, HttpResponse response){
        System.out.println("RegServlet:开始处理注册业务...");
        /*
            1.通过request得到注册页面上form表单中用户输入的注册信息
            2.将form表单数据以一个User对象形式保存并序列化到文件中
              文件名为:用户名.user
            3.设置response响应注册成功页面
         */
        /*
            这里getParameter的参数应当和对应页面上form表单中输入框的name属性指定的一致.
         */
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        String nickname = request.getParameter("nickname");
        String ageStr = request.getParameter("age");
        System.out.println(username+","+password+","+nickname+","+ageStr);
        /*
            两个必要的验证工作
            如果上述四个信息有空的,则直接跳转页面提示用户输入信息有误.
            提示页面:reg_error.html

            如果输入的用户已经存在,则直接跳转页面提示用户该用户已存在.
            提示页面:have_user.html
         */
        if (username==null || password==null || nickname==null || ageStr==null || !ageStr.matches("[0-9]+")){
            File file = new File("./webapps/myweb/reg_error.html");
            response.setEntity(file);
            return;
        }
        File file = new File(username+".user");
        if (file.exists()){
            file = new File("./webapps/myweb/have_user.html");
            response.setEntity(file);
            return;
        }



        int age = Integer.parseInt(ageStr);

        //2
        User user = new User(username,password,nickname,age);
        try (
                FileOutputStream fos = new FileOutputStream(username+".user");
                ObjectOutputStream oos = new ObjectOutputStream(fos);
        ){
            oos.writeObject(user);

            //3
            file = new File("./webapps/myweb/reg_success.html");
            response.setEntity(file);
        } catch (IOException e) {
            e.printStackTrace();
        }
        System.out.println("RegServlet:注册业务处理完成.");
    }
}